package com.dyna.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.dyna.domain.resp.PageResult;
import com.dyna.foundation.domain.entity.SysDictData;
import com.dyna.foundation.domain.entity.SysDictType;
import com.dyna.foundation.domain.form.SysDictTypeSaveForm;
import com.dyna.foundation.domain.req.SysDictDataReq;
import com.dyna.foundation.domain.req.SysDictTypePageReq;
import com.dyna.foundation.domain.req.SysDictTypeReq;
import com.dyna.foundation.domain.resp.SysDictTypeResp;

import java.util.List;
import java.util.Map;

/**
* @author zhoucaiwng
*/
public interface SysDictTypeService extends IService<SysDictType> {

    /**
     * 查询所有字典数据
     * @param req req
     * @return 字典数据
     */
    PageResult<SysDictTypeResp> getDictTypePage(SysDictTypeReq req);

    /**
     * 添加字典数据
     * @param sysDictType 字典
     * @return Integer
     */
    Integer addSysDictType(SysDictType sysDictType);

    /**
     * 修改字典数据
     * @param sysDictType 字典数据
     * @return 是否修改成功
     */
    Integer editSysDictType(SysDictType sysDictType);

    /**
     * 删除字典数据
     * @param dictId 字典数据id
     * @return 是否删除
     */
    Boolean delSysDictType(Integer dictId);

    /**
     * 修改字典类型状态
     * @param dictId 字典类型id
     * @param status 状态
     * @return Boolean
     */
    Boolean changeSysDictTypeStatus(Integer dictId, Integer status);

    /**
     * 根据查询指定类型字典数据
     * @param req 查询条件
     * @return 字典数据
     */
    PageResult<SysDictData> getSysDictDataPage(SysDictDataReq req);

    /**
     * 字典数据列表
     * @param req 查询条件
     * @return 字典数据
     */
    List<SysDictData> getSysDictDataList(SysDictDataReq req);

    /**
     * 添加字典数据
     * @param sysDictData 字典数据
     * @return Boolean
     */
    Boolean addSysDictData(SysDictData sysDictData);

    /**
     * 编辑字典数据
     * @param sysDictData 字典数据
     * @return Boolean
     */
    Boolean editSysDictData(SysDictData sysDictData);

    /**
     * 删除字典数据
     * @param dictId 字典数据id
     * @return Boolean
     */
    Boolean delSysDictData(Integer dictId);

    /**
     * 修改字典数据状态
     * @param dictId dictId
     * @param status status
     * @return Boolean
     */
    Boolean changeSysDictDataStatus(Integer dictId, Integer status);

    /**
     * 批量查询字典数据
     * @param dictTypeList 字典类型
     * @return Map<String, List<SysDictData>>
     */
    Map<String, List<SysDictData>> getBatchSysDictList(List<String> dictTypeList);

    /**
     * 根据字典类型查询字典Map数据
     * @param dictType 字典类型
     * @return Map<Integer, String>
     */
    Map<Integer, String> getSysDictDataMapByType(String dictType);

    /**
     * 根据字典类型查询字典数据
     * @param dictType 字典类型
     * @return List<SysDictData>
     */
    List<SysDictData> getSysDictDataByType(String dictType);

    /********************************************************************************************************/

    /**
     * 创建字典类型
     *
     * @param createReqVO 字典类型信息
     * @return 字典类型编号
     */
    Long createDictType(SysDictTypeSaveForm createReqVO);

    /**
     * 更新字典类型
     *
     * @param updateReqVO 字典类型信息
     */
    void updateDictType(SysDictTypeSaveForm updateReqVO);

    /**
     * 删除字典类型
     *
     * @param id 字典类型编号
     */
    void deleteDictType(Long id);

    /**
     * 获得字典类型分页列表
     *
     * @param pageReqVO 分页请求
     * @return 字典类型分页列表
     */
    PageResult<SysDictTypeResp> getDictTypePage(SysDictTypePageReq pageReqVO);

    /**
     * 获得字典类型详情
     *
     * @param id 字典类型编号
     * @return 字典类型
     */
    SysDictType getDictType(Long id);

    /**
     * 获得字典类型详情
     *
     * @param type 字典类型
     * @return 字典类型详情
     */
    SysDictType getDictType(String type);

    /**
     * 获得全部字典类型列表
     *
     * @return 字典类型列表
     */
    List<SysDictType> getDictTypeList();


}
